iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
Mobile Development

Swift大航道-啟航篇系列 第 6

swift內建高階函示(2)

  • 分享至 

  • xImage
  •  

swift內建高階函示(2)

  • sorted
  • forEach
  • compactMap
  • flatMap

sorted

sorted 用於對數組進行排序,並返回一個新排序的數組。可以傳入一個閉包來自定義排序的規則。

let numbers = [5, 2, 1, 4, 3]
let sortedNumbers = numbers.sorted { $0 < $1 }
print(sortedNumbers)  

這個閉包的作用是比較 $0 和 $1 的值。如果 $0 小於 $1,則這兩個元素的順序保持不變,否則順序會交換。這意味著閉包 { $0 < $1 } 會將數組按升序排列。

forEach

forEach 用於對數組中的每個元素執行某個操作,不返回任何值。

let numbers = [1, 2, 3, 4, 5]
numbers.forEach { print($0) }

因為不會回傳任何值,所以要print出來查看每個元素
輸出結果是
1
2
3
4
5

compactMap

compactMap 用於對數組中的每個元素進行轉換,同時會自動移除轉換後為 nil 的值。

let possibleNumbers = ["1", "2", "three", "4", "five"]
let actualNumbers = possibleNumbers.compactMap { Int($0) }
print(actualNumbers)  // 輸出: [1, 2, 4]

因為轉換three,five無法轉換,所以最後只保留[1,2,4]

flatMap

flatMap 將多個數組的元素合併為一個單一數組,它也可以對可選值進行處理,並自動解包非 nil 的值。

let nestedArrays = [[1, 2, 3], [4, 5], [6, 7, 8]]
let flatArray = nestedArrays.flatMap { $0 }
print(flatArray)  // 輸出: [1, 2, 3, 4, 5, 6, 7, 8]

簡單來說這會主動解包arrays裡面的值,並返回
展平過程
第一次迭代:$0 是 [1, 2, 3],這個子數組被展開並合併到結果數組中,結果是 [1, 2, 3]。
第二次迭代:$0 是 [4, 5],這個子數組被展開並合併到結果數組中,結果是 [1, 2, 3, 4, 5]。
第三次迭代:$0 是 [6, 7, 8],這個子數組被展開並合併到結果數組中,結果是 [1, 2, 3, 4, 5, 6, 7, 8]。
最終,所有子數組的元素都被展平並合併到一個單一的數組 flatArray 中。

結論

這些高階函數能夠讓你的 Swift 程式更簡潔、更具表現力,並且能夠有效地處理數組、集合和其他序列類型的數據。我們的語法學習就到這邊囉,之後如果有遇到常見的還會再提醒大家,明天就開始分享怎麼新增專案,還有專案的事前建置的部分。大家明天見


上一篇
swift內建的高階函式(1)
下一篇
swift 建立專案
系列文
Swift大航道-啟航篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言